package com.ali.gts.servlet.controller;

import com.ali.gts.servlet.domain.Book;
import com.ali.gts.servlet.domain.Cart;
import com.ali.gts.servlet.domain.CartItem;
import com.ali.gts.servlet.service.BookService;
import com.ali.gts.servlet.service.impl.BookServiceImpl;
import com.ali.gts.servlet.util.WebUtil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CartServlet extends BaseServlet{
    BookService bookService = new BookServiceImpl();



    //添加商品项
    protected void addItem(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        System.err.println("加入购物车 并体会 uri,Url,Referer的区别");
        //referer获取的是浏览器地址栏的地址。
        System.out.println("请求头Referer的值是："+req.getHeader("Referer"));
        System.out.println("请求的uri是:"+req.getRequestURI());
        //url是获取jsp页面发送给后台的地址
        System.out.println("请求的url是:"+req.getRequestURL());


        //1、获取请求的参数 商品编号
        int id  = Integer.parseInt(req.getParameter("id"));
        //2、调用bookservice.queryBookById(id) 得到图书的信息
        Book book = bookService.queryBookById(id);
        //3、把商品信息转换成cartitem 商品项
        CartItem cartItem = new CartItem(book.getId(),1,book.getName(),book.getPrice(),book.getPrice());
        //4、购物车中添加商品项
        Cart cart = (Cart)req.getSession().getAttribute("cart");
        if (cart == null){
            cart = new Cart();
            req.getSession().setAttribute("cart",cart);
        }
        cart.addItem(cartItem);

        //把最后添加的数据放到session 中在 首页展示最新添加的数据
        req.getSession().setAttribute("lastName",cartItem.getName());
        //5、重定向回图书列表页面
        resp.sendRedirect(req.getHeader("Referer"));


    }

    //删除商品项
    public void deleteItem(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取商品编号
        int id = WebUtil.parseInt(req.getParameter("id"),1);
        Cart cart = (Cart) req.getSession().getAttribute("cart");
        //这里的罗辑要注意下哈，涉及到了值对象的使用，无处不在的值对象引用。
        if(cart != null){
            //删除商品项
            cart.deleteItem(id);
            //重定向到购物车页面
            resp.sendRedirect(req.getHeader("Referer"));
        }

    }


    //清空购物车
    public void cleanCart(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取购物车
        Cart cart = (Cart) req.getSession().getAttribute("cart");
        //这里的罗辑要注意下哈，涉及到了值对象的使用，无处不在的值对象引用。
        if(cart != null){
            //删除商品项
            cart.clearItem();
            //重定向到购物车页面
            resp.sendRedirect(req.getHeader("Referer"));
        }

    }

    //修改购物车中的商品数量
    public void updateCartItem(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取购物车
        Cart cart = (Cart) req.getSession().getAttribute("cart");
        //获取商品的id,数量
        int id = WebUtil.parseInt(req.getParameter("id"),1);
        int count = WebUtil.parseInt(req.getParameter("count"),1);

        //这里的罗辑要注意下哈，涉及到了值对象的使用，无处不在的值对象引用。
        if(cart != null){
            //修改商品信息
            cart.updateItemCount(id,count);
            //重定向到购物车页面
            resp.sendRedirect(req.getHeader("Referer"));
        }

    }



}
